home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1996 February
/
EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso
/
earcd
/
util4
/
0utils.lha
/
0Utils
/
Touch.data
< prev
next >
Wrap
Text File
|
1995-09-05
|
3KB
|
140 lines
#ifdef TPLTER
Touch = {
SHORT = {{ touch files }};
DESCRIPTION = {{
Touch checks the existance (via Lock) of files
and then either calls SetFileDate if they exist
or else creates new files
RESULT
-/-
}};
BUGS = {{
Touch breaks on the first error
}};
SEEALSO = {{
C:SetDate, dos.library/Lock, dos.library/SetFileDate
}};
HISTORY = {{
12-02-95 b_noll created (accidently deleted the source)
12-02-95 b_noll created
20-02-95 b_noll restructured source
21-02-95 b_noll added version/format-prefix/offset
20-03-95 b_noll added args diagnostics
19-08-95 b_noll created .data file
30-08-95 b_noll 1.3 added breakcheck
05-09-95 b_noll 1.4 added wildcard support
}};
Template = "FILE/A/M";
Arguments = {{
STRPTR *file;
}};
userdata = {{
UBYTE apb[sizeof (struct AnchorPath) + 8 + MAXPATHLEN];
}};
version = "1.4";
body = {{
int cnt;
ULONG error;
BPTR bptr;
STRPTR name;
struct AnchorPath *ap; // long aligned Anchor
struct DateStamp ds;
retval = RETURN_OK;
ap = (void *)(((ULONG)(userdata->apb) + 7) & ~7);
ap->ap_Strlen = MAXPATHLEN;
ap->ap_BreakBits = 0;
ap->ap_FoundBreak = 0;
name = ap->ap_Buf;
for (cnt = 0; argv->file[cnt] && !retval && !IS_BROKEN(); ++cnt) {
ap->ap_Flags = 0;
for (error = MatchFirst(argv->file[cnt], ap); error == 0; error = MatchNext(ap)) {
//if (retval = do_touch (ap->ap_Buf, gvars))
// break;
retval = RETURN_ERROR;
if (bptr = Lock(name, SHARED_LOCK)) {
UnLock(bptr);
DateStamp(&ds);
if (SetFileDate(name, &ds)) {
retval = RETURN_OK;
} /* if */
} /* if */
if (retval)
break;
} /* for wilds */
MatchEnd(ap);
if (error != ERROR_NO_MORE_ENTRIES) { /* abnormal error */
if ((error == ERROR_OBJECT_NOT_FOUND) && !(ap->ap_Flags & APF_ITSWILD)) {
/* ---- we leave this backdoor in order 2 B able 2 */
/* delete icons whose files have been deleted */
/* by just typing the filename (w/o .info) */
//Printf ("doing NW %s\n", ap->ap_Buf);
//if (retval = do_touch (argv->file[cnt], gvars))
// break;
if ((bptr = Open(argv->file[cnt], MODE_NEWFILE))) {
Close(bptr);
} else
retval = RETURN_ERROR;
} else {
retval = RETURN_ERROR;
} /* if real error */
} /* if possible error */
} /* for all patterns */
}};
};
#endif
body = {{
int i;
STRPTR name;
retval = RETURN_OK;
for (i = 0; (name = argv->file[i]) && !(BREAKCHECK()); ++i) {
BPTR bptr;
if (bptr = Lock(name, SHARED_LOCK)) {
struct DateStamp ds;
UnLock(bptr);
DateStamp(&ds);
if (!SetFileDate(name, &ds)) {
retval = RETURN_ERROR;
break;
} /* if */
} else if ((IoErr() == ERROR_OBJECT_NOT_FOUND) && (bptr = Open(name, MODE_NEWFILE))) {
Close(bptr);
} else {
retval = RETURN_ERROR;
break;
} /* if */
} /* for */
}};